home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / sharew / accs / grafstar / listings / memo.lst < prev    next >
Encoding:
File List  |  1989-06-20  |  3.9 KB  |  94 lines

  1. ' =============================================================================
  2. '                                 M E M O R Y                          12.05.89
  3. ' =============================================================================
  4. '
  5. ' Wollen Sie mit eigenen Programmen an die reservierten Bilder herankommen,
  6. ' können Sie dies mit folgenden Routinen ganz einfach tun.
  7. ' Diese Routinen wurden in GFABASIC 2.0 geschrieben, sollten aber in der
  8. ' Version 3.0 ebenfalls laufen.
  9. '
  10. ' Hier werden zunächst die einzelnen Routinen kurz dargestellt. Anschließend
  11. ' folgt dann deren Programmtext.
  12. '
  13. ' Bsp.1: @Memo_getadr(*Adresse%,*Anzahl%,*Ext%)
  14. '        Man erhält die Startadresse und die Anzahl der Bilder sowie
  15. '        eine Zusatzinformation (Integer, 2 Byte).
  16. '
  17. ' Bsp.2: @Memo_putadr(Adresse%,5,0)
  18. '        Falls Bilder reserviert wurden, können diese hier angemeldet werden.
  19. '        In diesem Fall befinden sich 5 Bilder ab Adresse 'Adresse%'.
  20. '        Als Zusatzinformation wird eine '0' übergeben.
  21. '
  22. ' Bsp.3: @Memo_putadr(Adresse%,12,-1)
  23. '        Es werden neue Werte für Adresse und Anzahl der Bilder gesetzt.
  24. '        Die Zusatzinfo bleibt unverändert. Wenn negative Werte übergeben
  25. '        werden, bleibt der jeweilige Parameter unverändert.
  26. '
  27. ' Bsp.4: @Memo_clradr
  28. '        So werden die Informationen des Infospeichers gelöscht, d.h. es
  29. '        werden die ersten zwei Bytes der Kennung gelöscht, so daß die
  30. '        restlichen Informationen von der Procedure Memo_getadr() nicht
  31. '        mehr erkannt werden.
  32. '
  33. ' So sieht das Format des 16 Byte langen Informationsspeichers aus. Er liegt
  34. ' hinter dem (phys.) Bildspeicher, also ab Xbios(2)+32000.
  35. '
  36. ' PICTUREvaaaannee = 16Bytes
  37. ' |      ||   | |
  38. ' |      ||   | erweiterte Information (z.Zt.=0): Wort/14
  39. ' |      ||   Anzahl der Bilder: Wort/12
  40. ' |      |Adresse des 1. Bildes: Langwort/8
  41. ' |      Format-Version (=0): Byte/7
  42. ' Kennung: 7 Byte String/0
  43. '
  44. ' Hier sind die Routinen zur Abfrage des Speichers:
  45. '
  46. Procedure Memo_getadr(Aptr.%,Nptr.%,Eptr.%)
  47.   Local Adresse.%,Info$,Adr.%,Num.%,Ext.%       !Lokale Variablen
  48.   '
  49.   Info$=Space$(7)                               !7-Byte-String vorbereiten
  50.   Adresse.%=Xbios(2)+32000                      !Adresse ermitteln
  51.   Bmove Adresse.%,Varptr(Info$),7               !Kennung in String kopieren
  52.   '
  53.   If Info$="PICTURE" And Peek(Adresse.%+7)=0    !Kennung und Version abfragen
  54.     Adr.%=Lpeek(Adresse.%+8)                    !Bildadresse ...
  55.     Num.%=Dpeek(Adresse.%+12)                   !Anzahl der Bilder ...
  56.     Ext.%=Dpeek(Adresse.%+14)                   !und Zusatzinformationen holen
  57.     '                                           !(-> ist zur Zeit unbenutzt)
  58.   Else
  59.     Adr.%=-1                                    !Bei falscher Kennung ...
  60.     Num.%=-1                                    !wird jeder Variable ...
  61.     Ext.%=-1                                    !'-1' übergeben
  62.     '
  63.   Endif
  64.   '
  65.   *Aptr.%=Adr.%                                 !Und nun alle ...
  66.   *Nptr.%=Num.%                                 !Werte über die Pointer ...
  67.   *Eptr.%=Ext.%                                 !zurückgeben
  68. Return
  69. Procedure Memo_putadr(Adr%,Num%,Ext%)
  70.   Local Adresse%,Kennung$                       !Lokale Variablen
  71.   '
  72.   Kennung$="PICTURE"                            !Kennungs-String definieren
  73.   Adresse%=Xbios(2)+32000                       !Adresse ermitteln
  74.   '
  75.   Bmove Varptr(Kennung$),Adresse%,7             !Kennung übertragen
  76.   '
  77.   If Adr%>=0
  78.     Lpoke Adresse%+8,Adr%                       !Adresse, ...
  79.   Endif
  80.   If Num%>=0
  81.     Dpoke Adresse%+12,Num%                      !Anzahl und ...
  82.   Endif
  83.   If Ext%>=0
  84.     Dpoke Adresse%+14,Ext%                      !Zusatzinfo setzen
  85.   Endif
  86. Return
  87. Procedure Memo_clradr
  88.   Local Adresse%                                !Lokale Variable
  89.   '
  90.   Adresse%=Xbios(2)+32000                       !Adresse ermitteln
  91.   '
  92.   Dpoke Adresse%,0                              !Kennung löschen
  93. Return
  94.